package bishiqiangxunday20;
import java.util.*;
public class Test2 {
    //题目 : 连续子数组的最大和  (ACM版本)  笔试强训 day20第二题
    //可以动态规划
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        //先输入
        long n = Long.parseLong(in.nextLine());
        String[] strNun = in.nextLine().split(" ");
        long[] arr = new long[strNun.length];
        for(int i = 0; i < strNun.length; i++) {
            arr[i] = Long.parseLong(strNun[i]);  //转为long类型
        }

        long max = sum(n,arr);
        System.out.println(max);

    }

    //寻找连续子数组的最大和
    public static long sum(long n, long[] arr) {
        if(arr == null) {
            return -1;
        }

        //定义一个变量记录一下前一个元素下标对应的最大和
        //一个变量 记录最大子数组的和
        long tmp = arr[0];
        long ret = arr[0];

        for(int i = 1; i <arr.length; i++) {
            tmp = Math.max(arr[i],arr[i] + tmp);
            //更新一下
            ret = Math.max(ret,tmp);;
        }
        return ret;
    }

}
